package 每日一题;

import 我的JDK基础数据结构.HashMap.HashMap;

import java.util.Map;

/**
 * @description:
 * @author: 小白白
 * @create: 2021-06-05
 **/

public class No525连续数组 {

    /**
     * 给定一个二进制数组 nums , 找到含有相同数量的 0 和 1 的最长连续子数组，并返回该子数组的长度。
     *
     * 示例 1:
     * 输入: nums = [0,1]
     * 输出: 2
     * 说明: [0, 1] 是具有相同数量 0 和 1 的最长连续子数组。
     * 示例 2:
     * 输入: nums = [0,1,0]
     * 输出: 2
     * 说明: [0, 1] (或 [1, 0]) 是具有相同数量0和1的最长连续子数组。
     * 提示：
     * 1 <= nums.length <= 105
     * nums[i] 不是 0 就是 1
     */

    public int findMaxLength(int[] nums) {

        Map<Integer,Integer> map=new HashMap<>();
        map.put(0,-1);
        int oneCount=0;
        int result=0;

        for (int i = 0; i < nums.length; i++) {
            if(nums[i]==1){
                oneCount++;
            }else{
                oneCount--;
            }
            Integer index = map.get(oneCount);
            if(index==null){
                map.put(oneCount,i);
            }else{
                result=Math.max(result,i-index);
            }
        }

        return result;
    }

    public static void main(String[] args) {
        No525连续数组 n=new No525连续数组();
        int[] arr={0,1,1,0,1,1,1,0};
        int maxLength = n.findMaxLength(arr);
        System.out.println(maxLength);
    }

}
